/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ru.jSkyRoom.interfaces.major;

import ru.jSkyRoom.interfaces.additional.HasEnchantment;
import ru.jSkyRoom.interfaces.additional.HasEquipSlot;
import ru.jSkyRoom.interfaces.additional.HasImpactData;
import ru.jSkyRoom.interfaces.additional.HasModel;
import ru.jSkyRoom.interfaces.additional.HasSpeed;
import ru.jSkyRoom.interfaces.additional.HasValue;
import ru.jSkyRoom.interfaces.additional.HasWeight;
import ru.jSkyRoom.interfaces.additional.HasKeywords;
import ru.jSkyRoom.interfaces.additional.HasScript;
import ru.jSkyRoom.interfaces.additional.HasTemplate;
import ru.jSkyRoom.interfaces.stub.CritEffect;
import ru.jSkyRoom.interfaces.stub.FirstPersonModel;
import ru.jSkyRoom.interfaces.stub.JSkySound;
import skyproc.WEAP;

/**
 *
 * @author Rakev
 */
public interface Weapon extends DescriptionedMajor, HasScript, HasKeywords, HasWeight, HasValue, HasEnchantment, HasEquipSlot, HasTemplate<Weapon>, HasModel, HasSpeed, HasImpactData {

    public int getDamage();

    public void setDamage(int damage);

    public int getEnchantmentCharge();

    public void setEnchantmentCharge(int amount);

    public JSkySound getUnequipSound();

    public void setUnequipSound(JSkySound sound);

    public JSkySound getEquipSound();

    public void setEquipSound(JSkySound id);

    public JSkySound getFailSound();

    public void setFailSound(JSkySound id);

    public JSkySound getIdleSound();

    public void setIdleSound(JSkySound id);

    public WEAP.WeaponType getWeaponType();

    public void setWeaponType(WEAP.WeaponType type);

    public float getReach();

    public void setReach(float reach);

    public float getSightFOV();

    public void setSightFOV(float fov);

    public int getVATS();

    public void setVATS(int vats);

    public int getProjectiles();

    public void setProjectiles(int gprojectiles);

    public float getMinRange();

    public void setMinRange(float minRange);

    public float getMaxRange();

    public void setMaxRange(float maxRange);

    public float getStagger();

    public void setStagger(float stagger);

    public int getCritDamage();

    public void setCritDamage(int critDmg);

    public float getCritMult();

    public void setCritMult(float critMult);

    public boolean getCritEffectOnDeath();

    public void setCritEffectOnDeath();

    public void unsetCritEffectOnDeath();

    public CritEffect getCritEffect();

    public void setCritEffect(CritEffect critEffect);

    public boolean getFlag(WEAP.WeaponFlag flag);

    public void setFlag(WEAP.WeaponFlag flag);

    public void unsetFlag(WEAP.WeaponFlag flag);

    public FirstPersonModel getFirstPersonModel();

    public void setFirstPersonModel(FirstPersonModel firstPersonModel);
}
